//index相关controller
//导入post相关的model
var Post = require('../models/post.js')
//导入type相关的model
var Type = require('../models/type.js')
//导入comment相关的model
var Comment = require('../models/comment.js')
//导入util工具类
var Util = require('./util.js')
//导入promise类库
var Promise = require('bluebird')
//获取最后一条评论的方法
function getLastComment(post) {
  //返回一个新的promise对象
  return new Promise(function (resolve, reject) {
    //通过id获取最后一条评论内容
    Comment.getLastCommentByPostId(post._id, function (err, comment) {
      if (err) {
        console.log(err)
        reject(err)
      }
      //如果评论内容存在
      if (comment) {
        //处理评论时间
        comment.time = Util.transformTime(comment.meta.createAt)
        //将comment对象post上
        post.comment = comment
      }
      //将post对象放在resolve中
      resolve(post)
    })

  })
}

//get方式访问主页
exports.index = function (req, res) {
  //定义_posts数组
  var _posts = []
  //获取post类型
  var type = req.query.type || 'all'
  //获取当前page页数
  var page = req.query.p || 1
  //通过type类型获取该条type记录
  Type.findByType(type, function (err, result) {
    var newType
    //如果result没有结果
    if (!result) {
      //newType的值为all
      newType = 'all'
    }
    else {
      //否则newType的值为该结果的id
      newType = result._id
    }
    //通过type类型获取post数据
    Post.getByType(newType, page, 2, function (err, posts) {
      console.log(posts)
      if (err) {
        console.log(err)
      }
      //获取post的总数量
      Post.getCount(newType, function (err, counts) {
        //获取总页数
        var pages = Util.getPages(counts, 2)
        //获取所有type数据
        Type.fetch(function (err, types) {
          if (err) {
            console.log(err)
          }
          //根据每一个posts数据获取最后一条评论
          for (var i = 0; i < posts.length; i++) {
            var _post = posts[i]
            _posts.push(getLastComment(_post))
          }
          //使用promise.all处理一组promise对象
          Promise.all(_posts).then(function (posts) {
            res.render('index', {title: 'CNode:Node中文社区', posts: posts, pages: pages, currentpage: page, types: types})
          })


        })


      })


    })

  })


}